//<![CDATA[

// Global variables
var highlightCircle;
var ResizeMarker;
var currentMarker;
var mapdiv = document.getElementById("map");
var map;
var poly;
var count = 0;
var points = new Array();
var markers = new Array();
var rads = new Array();
var tooltip;
var lineColor = "#000000";
var fillColor = "#000000";
var lineWeight = 3;
var lineOpacity = 0.7;
var fillOpacity = .2;
var dist = document.getElementById("dist");
var debug = document.getElementById("debug");
var mapZoom = 11; // Масштаб карты по умолчанию
var polyRadius = 40; // Значение радиуса по умолчанию.
var mode = "find";
// Обработка запроса - передача параметров файлу handler.php
function ButtonClick() {
	var str = "";
	var length = poly.getLength() / 1000;
	var about = document.getElementById("about").value;
	var hstart = document.getElementById("hstart").value;
	var hstop = document.getElementById("hstop").value;
	var mstart = document.getElementById("mstart").value;
	var mstop = document.getElementById("mstop").value;
	var plstart = document.getElementById("plstart").value;
	var plstop = document.getElementById("plstop").value;
	var period = document.getElementById("period").value;
	var ydate = document.getElementById("ydate").value;
	var mdate = document.getElementById("mdate").value;
	var ddate = document.getElementById("ddate").value;
	// Преобразование даты в нормальный вид
	var date = ydate * 10000 + mdate * 100 + ddate * 1;
	// Преобразование времени в нормальный вид
	var start = hstart + ":" + mstart + ":00";
	var stop = hstop + ":" + mstop + ":00";
	// Создание строки с координатами
	for (i = 0; i < markers.length; i++)
		str = str + markers[i].getPoint();
	window.location = "handler.php?act=add&markers=" + str + "&dist="
			+ length.toFixed(3) + "&about=" + about + "&date=" + date
			+ "&start=" + start + "&stop=" + stop + "&plstart=" + plstart
			+ "&plstop=" + plstop + "&period=" + period;
}

function setValue() {
	var arv = markers[1].point.toString();
	// This line converts js array to String document.test.arv.value=arv;
	// This sets the string to the hidden form field. }

}

function addIcon(icon) { // Add icon attributes

	icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
	icon.iconSize = new GSize(21, 34);
	icon.shadowSize = new GSize(31, 34);
	icon.iconAnchor = new GPoint(10, 34);
	icon.infoWindowAnchor = new GPoint(5, 1);
}

function showTooltip(marker) { // Отображение надписи над точками

	tooltip.innerHTML = marker.tooltip;
	tooltip.style.display = "block";

	// Прозрачность - специально для IE
	if (typeof (tooltip.style.filter) == "string") {
		tooltip.style.filter = "alpha(opacity:70)";
	}

	var currtype = map.getCurrentMapType().getProjection();
	var point = currtype.fromLatLngToPixel(map.fromDivPixelToLatLng(new GPoint(
			0, 0), true), map.getZoom());
	var offset = currtype.fromLatLngToPixel(marker.getLatLng(), map.getZoom());
	var anchor = marker.getIcon().iconAnchor;
	var width = marker.getIcon().iconSize.width + 6;
	var height = 10;
	var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(offset.x
			- point.x - anchor.x + width, offset.y - point.y - anchor.y
			- height));
	pos.apply(tooltip);

}

function buildMap() {

	map = new GMap2(mapdiv, {
		draggableCursor : "auto",
		draggingCursor : "move"
	});

	// Add a div element for toolips
	tooltip = document.createElement("div");
	tooltip.className = "tooltip";
	map.getPane(G_MAP_MARKER_PANE).appendChild(tooltip);

	// Load initial map and a bunch of controls
	map.setCenter(new GLatLng(56.285678, 43.965225), mapZoom);
	map.addControl(new GSmallMapControl()); // Zoom control
	map.addMapType(G_PHYSICAL_MAP);

	map.disableDoubleClickZoom();
	map.enableScrollWheelZoom();

	// Add click listener
	GEvent.addListener(map, "click", createMarker);

}

function createMarker(overlay, point) {

	if (point) {

		var icon = new GIcon();
		addIcon(icon);

		// Создание маркера, отрисовка его на карте и заталкивание в стек с
		// маркерами.
		var marker = new GMarker(point, {
			icon : icon,
			draggable : true,
			bouncy : true,
			dragCrossMove : true
		});

		map.addOverlay(marker);
		markers.push(marker);

		// Отрисовка радиуса вокруг точки
		function circle(radius) {

			if (highlightCircle) {
				map.removeOverlay(highlightCircle);
			}

			if (ResizeMarker) {
				map.removeOverlay(ResizeMarker);
			}

			var markerPoint = marker.getPoint();
			var polyPoints = Array();

			var projection = G_NORMAL_MAP.getProjection(); // Проекция карты -
															// с координатами x
															// и y
			var polyNumSides = 180;
			var polySideLength = 2;

			if (radius) { // Если передается параметр radius, то используем
							// его.
				if (radius > 60)
					polyRadius = 60;
				else if (radius < 10)
					polyRadius = 10;
				else
					polyRadius = radius;
			}

			rads.push(polyRadius);
			var clickedPixel = projection.fromLatLngToPixel(markerPoint,
					mapZoom);

			for ( var a = 0; a < (polyNumSides + 1); a++) {
				var aRad = polySideLength * a * (Math.PI / 180);
				var pixelX = clickedPixel.x + polyRadius * Math.cos(aRad);
				var pixelY = clickedPixel.y + polyRadius * Math.sin(aRad);
				var polyPixel = new GPoint(pixelX, pixelY);
				var polyPoint = projection
						.fromPixelToLatLng(polyPixel, mapZoom);
				polyPoints.push(polyPoint);
			}

			// Использование GPolygon(points, strokeColor?, strokeWeight?,
			// strokeOpacity?, fillColor?, fillOpacity?)
			highlightCircle = new GPolygon(polyPoints, lineColor, lineWeight,
					lineOpacity, fillColor, fillOpacity);
			map.addOverlay(highlightCircle);

			// ----------------------------тест-----------------------------------------------

			var ResizePixel = new GPoint(pixelX, pixelY);
			var ResizePoint = projection
					.fromPixelToLatLng(ResizePixel, mapZoom);
			var ResizeIcon = new Object();

			ResizeIcon.icon = new GIcon();
			ResizeIcon.icon.image = "resize.png";
			ResizeIcon.icon.iconSize = new GSize(25, 20);
			ResizeIcon.icon.shadowSize = new GSize(0, 0);
			ResizeIcon.icon.iconAnchor = new GPoint(12, 10);
			ResizeIcon.draggable = true;
			ResizeIcon.bouncy = false;

			ResizeMarker = new GMarker(ResizePoint, ResizeIcon);
			map.addOverlay(ResizeMarker);

			GEvent.addListener(ResizeMarker, "dragend", function() {
				var projection = G_NORMAL_MAP.getProjection(); // Проекция
																// карты - с
																// координатами
																// x и y
					var cursor = projection.fromLatLngToPixel(ResizeMarker
							.getPoint(), mapZoom);
					updateCircle(clickedPixel, cursor);
				});

			GEvent.addListener(ResizeMarker, "drag", function() {
				var projection = G_NORMAL_MAP.getProjection(); // Проекция
																// карты - с
																// координатами
																// x и y
					var cursor = projection.fromLatLngToPixel(ResizeMarker
							.getPoint(), mapZoom);
					// updateCircle(clickedPixel, cursor); //Почему-то не
					// работает...
				});
		}

		function updateCircle(center, marker) {
			var point1 = new GPoint(0, 0);
			var point2 = new GPoint(marker.x - center.x, marker.y - center.y);
			radius = Math.sqrt(point2.x * point2.x + point2.y * point2.y); // radius
																			// =
																			// sqrt(x^2
																			// +
																			// y^2)
			// debug.innerHTML = "<br>radius = " + radius + "<br>point1(center)
			// = " + point1 + "<br>point2(marker) = " + point2; //DEBUG
			circle(radius);
		}

		// ----------------------------тест-----------------------------------------------

		// Отображать радиус при наведении мышки на маркер
		GEvent.addListener(marker, "mouseover", function() {
			showTooltip(marker);
			// circle();
			});

		// При убирании мышки с маркера радиус удаляется
		GEvent.addListener(marker, "mouseout", function() {
			tooltip.style.display = "none";
			// map.removeOverlay(highlightCircle);
				// map.removeOverlay(ResizeMarker);
			});

		// При перетаскивании маркера радиус тоже перетаскивается
		GEvent.addListener(marker, "drag", function() {
			showTooltip(marker);
			circle();
			drawOverlay();
		});

		// Удаление маркера при повторном клике
		GEvent.addListener(marker, "click", function() {
			tooltip.style.display = "none";

			// Удаление маркера и радиуса под ним
				for ( var n = 0; n < markers.length; n++) {
					if (markers[n] == marker) {
						map.removeOverlay(markers[n]);
						map.removeOverlay(highlightCircle);
						map.removeOverlay(ResizeMarker);
						break;
					}
				}

				// Shorten array of markers and adjust counter
				markers.splice(n, 1);

				if (markers.length == 0) {
					count = 0;
				} else {
					count = markers[markers.length - 1].content;
					drawOverlay();
				}
			});
		circle(); // При клике сразу отрисовывается радиус
		// var timer = setTimeout("map.removeOverlay(highlightCircle)",1500);
		drawOverlay();
	}
}

function toggleMode() {

	if (markers.length > 2)
		drawOverlay();
}

function drawOverlay() {

	if (poly) {
		map.removeOverlay(poly);
	}

	points.length = 0;

	for (i = 0; i < markers.length; i++) {
		points.push(markers[i].getLatLng());
		markers[i].tooltip = "Точка " + (i + 1); // Нумерация точек "в
													// реальном времени"
	}

	// Отрисовка полилиний заново
	poly = new GPolyline(points, lineColor, lineWeight, lineOpacity);
	var length = poly.getLength();
	length = poly.getLength() / 1000;
	dist.innerHTML = "Расстояние: " + length.toFixed(3) + " км";

	if (markers.length > 2)
		markers[markers.length - 2].setImage("blue.png");
	markers[markers.length - 1].setImage("red.png");
	markers[0].setImage("green.png");
	map.addOverlay(poly);
}

function clearMap() {
	// Очистка существующей карты. Сброс массивов.
	map.clearOverlays();
	points.length = 0;
	markers.length = 0;
	count = 0;
	dist.innerHTML = "&nbsp;";
	debug.innerHTML = "&nbsp;";
}

// ]]>
